//
//  HomeViewController.swift
//  Sina
//
//  Created by 管观荣 on 15/9/21.
//  Copyright © 2015年 CHer. All rights reserved.
//

import UIKit
import SVProgressHUD

let WBNomralCellID = "WBNomralCellID"
let WBRtweetedCellID = "WBRtweetedCellID"
class HomeViewController: BaseTableViewController {

    //微博列表视图模型
    lazy var listViewModel = HomeListViewModel()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        if !UserAccountViewModel.sharedAccountViewModel.userLogon {
        visitView?.setupView(nil, title: "关注一些人，回这里看看有什么惊喜")
            return
        }
        
        prepareTableView()
        loadHomeData()
    }
    /// 准备表格属性 - 不要在`主方法`中写碎代码 - 提高代码的可读性
    /// 小方法，就放在主方法的下方或者上方
    private func prepareTableView() {
        //注册可重用cell
        tableView.registerClass(NomralCell.self, forCellReuseIdentifier: WBNomralCellID)
        tableView.registerClass(RetweetedCell.self, forCellReuseIdentifier: WBRtweetedCellID)
        // 设置行高 - 如果没有动态修改 cell 的约束的情况，行高计算可以使用以下两个代码
        // 条件：要有一个自上而下设置约束的控件，同时指定`底部`约束
        // *** 注意：如果指定固定行高，或者计算行高，一定不要不要设置底部约束
        // 预估行高 - 要尽量和本身的行高一致
        /**
        如果定义了预估行高，会使用预估行高来计算，行高代理方法调用的少！
        */
        tableView.estimatedRowHeight = 400
        
        // 取消分割线
        tableView.separatorStyle = .None
        
    }
    //加载数据
    private func loadHomeData(){
       listViewModel.loadHome { (error) -> () in
        if  error != nil {
            SVProgressHUD.showInfoWithStatus("您的网路不给力")
            return
        }
        // 到此为止已经有数据了
        // 刷新表格
        self.tableView.reloadData()
        }
    }
}

//数据源  ，父类实现了delegate
extension HomeViewController{
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return listViewModel.home.count
    }
    
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        // 本方法会调用计算行高的方法
        let vm = listViewModel.home[indexPath.row]
        
        let cell = tableView .dequeueReusableCellWithIdentifier(vm.cellID, forIndexPath: indexPath) as! HomeCell
        
        cell.viewModel = vm
        return cell
    }
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        
        return listViewModel.home[indexPath.row].rowHeight
    }

    
}
